home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Development Platforms / Apple II / Essentials / AppleScanGS / Scanner_GSOS.aii < prev    next >
Encoding:
Text File  |  1990-12-04  |  26.1 KB  |  1,156 lines  |  [TEXT/MPS ]

  1.  
  2.                 CASE    OBJ
  3.                 Case    On
  4.  
  5.                 INCLUDE        'M16.UTIL'
  6.  
  7. _useToolset        equ        0        ; define as 1 to use Tool039
  8.  
  9. open_call        equ        $2010
  10. read_call        equ        $2012
  11. close_call        equ        $2014
  12. dinfo_call        equ        $202c
  13. dstatus_call    equ        $202d
  14. dcontrol_call    equ        $202e
  15.  
  16.                 Import    scanDevnum
  17.                 Import    _toolErr
  18.  
  19. ;***********************************
  20. ; Scanner_SetMode()
  21. ;    description: This call sets the mode for scanning
  22. ;    entry:        None.
  23. ;    exit:        Carry set, and error code in Acc.
  24. ;***********************************
  25. Scanner_SetMode    PROC    EXPORT
  26.     if _useToolset then
  27.                 lda        >scanDevnum
  28.                 sta        >ms_did
  29.     else
  30.                 ENTRY    ms_did
  31.     endif
  32.  
  33.                 jsl     $e100a8            ;normal GS/OS entry point
  34.                 dc.w    dcontrol_call
  35.                 dc.l    mode_select        ;4 byte pointer to parameter block
  36.                 sta        >_toolErr
  37.                 rtl
  38.  
  39. mode_select
  40.                 dc.w    $0005
  41. ms_did            dc.w    $0000
  42.                 dc.w    $8015
  43.                 dc.l    @cdb
  44.                 dc.l    $0000000C
  45.                 dc.l    $00000000
  46.  
  47. @cdb            dc.w    $0000
  48.                 dc.b    $15
  49.                 dc.b    $10
  50.                 dcb.b    2,$00
  51.                 dc.b    $0C
  52.                 dcb.b    7,$00
  53.                 dc.l    @data
  54.  
  55. @data            dcb.b    4,$00                    ;reserved - 4 bytes
  56.                 dc.b    $01                        ;page code - Apple-specific parameter page
  57.                 dc.b    $08                        ;page length - Apple-specific page
  58.                 dc.b    $01                        ;graymap - 1 = no alteration to data
  59.                 dc.b    $40                        ;auto background adjustment threshold
  60.                 dc.b    $00                        ;lamp - 0 = turn off
  61.                 dcb.b    3,$00                    ;reserved - 3 bytes
  62.  
  63.                 ENDP
  64.  
  65. ;***********************************
  66. ; Scanner_SetHalfTones()
  67. ;    description: This call sets the mode for scanning
  68. ;    entry:        None.
  69. ;    exit:        Carry set, and error code in Acc.
  70. ;***********************************
  71. Scanner_SetHalfTones PROC    EXPORT
  72.     if _useToolset then
  73.                 lda        >scanDevnum
  74.                 sta        >send_did
  75.     else
  76.                 ENTRY    send_did
  77.     endif
  78.                 
  79.                 jsl     $e100a8            ;normal GS/OS entry point
  80.                 dc.w    dcontrol_call
  81.                 dc.l    send            ;4 byte pointer to parameter block
  82.                 sta        >_toolErr
  83.                 rtl
  84. send
  85.                 dc.w    $0005
  86. send_did        dc.w    $0000
  87.                 dc.w    $802A
  88.                 dc.l    @cdb
  89.                 dc.l    $00000011
  90.                 dc.l    $00000000
  91.  
  92. @cdb            dc.w    $0000
  93.                 dc.b    $2A
  94.                 dc.b    $00
  95.                 dc.b    $02
  96.                 dcb.b    2,$00
  97.                 dc.b    $02
  98.                 dcb.b    2,$00
  99.                 dc.b    $11
  100.                 dcb.b    3,$00
  101.                 dc.l    @data
  102.  
  103. @data            dc.b    $44,$f0,$40,$80,$c0,$b0,$00,$10,$50
  104.                 dc.b    $70,$30,$20,$90,$e0,$a0,$60,$d0
  105.  
  106.                 ENDP
  107.  
  108. ;***********************************
  109. ; Scanner_DefWindow(scanner_window_definition)
  110. ;    description: This call defines the scanner window
  111. ;    entry:        Long pointer to the scanner definition proc.
  112. ;    exit:        Carry set, and error code in Acc.
  113. ;***********************************
  114. Scanner_DefWindow PROC    EXPORT
  115.                 ENTRY    dfw_did
  116.                 lda        6,S                ;get the pointer to the window definition
  117.                 sta        >def_data+2
  118.                 lda        4,S                ;get the rest of the pointer
  119.                 sta        >def_data
  120.     if _useToolset then
  121.                 lda        >scanDevnum
  122.                 sta        >dfw_did
  123.                 jsl     $e100a8            ;normal GS/OS entry point
  124.     else
  125. @over_2            jsl     $e100a8            ;normal GS/OS entry point
  126.     endif
  127.                 dc.w    dcontrol_call
  128.                 dc.l    def_wndw        ;4 byte pointer to parameter block
  129.                 sta        >_toolErr
  130.                 rtl
  131.  
  132. def_wndw
  133.                 dc.w    $0005
  134. dfw_did            dc.w    $0000
  135.                 dc.w    $8024
  136.                 dc.l    @cdb
  137.                 dc.l    $00000030
  138.                 dc.l    $00000000
  139.  
  140. @cdb            dc.w    $0000
  141.                 dc.b    $24
  142.                 dcb.b    7,$00
  143.                 dc.b    $30
  144.                 dc.b    $80
  145.                 dcb.b    2,$00
  146. def_data        dc.l    $00000000
  147.  
  148.                 ENDP
  149.  
  150. ;***********************************
  151. ; Scanner_Scan()
  152. ;    description: This call starts the scanner scanning
  153. ;    entry:        None.
  154. ;    exit:        Carry set, and error code in Acc.
  155. ;***********************************
  156. Scanner_Scan    PROC    EXPORT
  157.     if _useToolset then
  158.                 lda        >scanDevnum
  159.                 sta        >scan_did
  160.     else
  161.                 ENTRY    scan_did
  162.     endif
  163.                 
  164.                 jsl     $e100a8            ;normal GS/OS entry point
  165.                 dc.w    dcontrol_call
  166.                 dc.l    scan            ;4 byte pointer to parameter block
  167.                 sta        >_toolErr
  168.                 rtl
  169. scan
  170.                 dc.w    $0005
  171. scan_did        dc.w    $0000
  172.                 dc.w    $801B
  173.                 dc.l    @cdb
  174.                 dc.l    $00000001
  175.                 dc.l    $00000000
  176.  
  177. @cdb            dc.w    $0000
  178.                 dc.b    $1b
  179.                 dcb.b    3,$00
  180.                 dc.b    $01
  181.                 dc.b    $00
  182.                 dcb.b    6,$00
  183.                 dc.l    @data
  184.  
  185. @data            dc.b    $00
  186.  
  187.                 ENDP
  188.  
  189. ;***********************************
  190. ; Scanner_Read(data_pointer, requestCount)
  191. ;    description: This call starts the scanner scanning
  192. ;    entry:        A pointer to the data destination, and a long count.
  193. ;    exit:        Carry set, and error code in Acc.
  194. ;NOTE: here we must utilize the pointer we are handed...., and it must reflect the real data size
  195. ;***********************************
  196. Scanner_Read    PROC    EXPORT
  197.  
  198.                 lda        6,S                ;get the pointer to the window definition
  199.                 sta        >buffer1+2
  200.                 lda        4,S                ;get the rest of the pointer
  201.                 sta        >buffer1                
  202.  
  203.                 lda        10,S            ;get the data length
  204.                 sta        >r_trans+2
  205.                 lda        8,S                ;get the rest of the data length
  206.                 sta        >r_trans
  207.  
  208. @save_loop        jsl     $e100a8            ;normal GS/OS entry point
  209.                 dc.w    read_call
  210.                 dc.l    read            ;4 byte pointer to parameter block
  211.                 bcs        @exit
  212.  
  213.                 sta        >_toolErr
  214.                 lda        >t_trans+2
  215.                 tax
  216.                 lda        >t_trans
  217.  
  218.                 rtl
  219.  
  220. @exit            sta        >_toolErr
  221.                 rtl
  222.  
  223.                 export    r_dref
  224. read
  225.                 dc.w    $0004
  226. r_dref            dc.w    $0000
  227. buffer1            dc.l    $00000000
  228. r_trans            dc.l    300
  229. t_trans            dc.l    $00000000
  230.  
  231.                 ENDP
  232.  
  233. ;***********************************
  234. ; CPCScan_SetMode()
  235. ;    description: This call sets the mode for scanning on the
  236. ;    Complete PC Scanner, both Hand and Page
  237. ;    entry:        None.
  238. ;    exit:        Carry set, and error code in Acc.
  239. ;***********************************
  240. CPCScan_SetMode    PROC    EXPORT
  241.  
  242.                 ENTRY    CPCms_did
  243.  
  244.                 jsl     $e100a8            ;normal GS/OS entry point
  245.                 dc.w    dcontrol_call
  246.                 dc.l    @mode_select    ;4 byte pointer to parameter block
  247.                 sta        >_toolErr
  248.                 rtl
  249.  
  250. @mode_select
  251.                 dc.w    $0005
  252. CPCms_did        dc.w    $0000
  253.                 dc.w    $8015
  254.                 dc.l    @cdb
  255.                 dc.l    $0000000C
  256.                 dc.l    $00000000
  257.  
  258. @cdb            dc.w    $0000
  259.                 dc.b    $15
  260.                 dcb.b    3,$00
  261.                 dc.b    $0C
  262.                 dcb.b    7,$00
  263.                 dc.l    CPC_MSdata
  264.  
  265.                 EXPORT    CPC_MSdata
  266. CPC_MSdata        dcb.b    4,$00                    ;reserved - 4 bytes
  267.                 EXPORT    CPC_Type
  268. CPC_Type        dc.b    $00                        ;Scanner Type <128 = Hand, ≥128 = Page
  269.                 dc.b    $00                        ;reserved
  270.                 EXPORT    CPC_Page_Ctrl
  271. CPC_Page_Ctrl    dc.b    $00                        ;Page Control 1=Go, 0 = Stop
  272.                 EXPORT    CPC_Hand_Ctrl
  273. CPC_Hand_Ctrl    dc.b    $00                        ;Hand Control 1=On, 0 = Off
  274.                 EXPORT    CPC_Scan_Len
  275. CPC_Scan_Len    dcb.b    2,$00                    ;Bytes Per Line MSB >>> LSB
  276. CPC_Timer        dcb.b    2,$00                    ;ShutOff Timer  MSB >>> LSB
  277.  
  278.                 ENDP
  279.  
  280. ;***********************************
  281. ; CPCScan_GetMode()
  282. ;    description: This call gets the mode for scanning on the
  283. ;    Complete PC Scanner, both Hand and Page
  284. ;    entry:        None.
  285. ;    exit:        Carry set, and error code in Acc.
  286. ;***********************************
  287. CPCScan_GetMode PROC    EXPORT
  288.  
  289.                 ENTRY    CPCmsen_did
  290.                 IMPORT    CPC_MSdata
  291.  
  292.                 jsl     $e100a8            ;normal GS/OS entry point
  293.                 dc.w    dstatus_call
  294.                 dc.l    @mode_sense        ;4 byte pointer to parameter block
  295.                 sta        >_toolErr
  296.                 rtl
  297.  
  298. @mode_sense
  299.                 dc.w    $0005
  300. CPCmsen_did        dc.w    $0000
  301.                 dc.w    $801A
  302.                 dc.l    @cdb
  303.                 dc.l    $0000000C
  304.                 dc.l    $00000000
  305.  
  306. @cdb            dc.w    $0000
  307.                 dc.b    $1A
  308.                 dcb.b    3,$00
  309.                 dc.b    $0C
  310.                 dcb.b    7,$00
  311.                 dc.l    CPC_MSdata
  312.  
  313.                 ENDP
  314.  
  315. ;***********************************
  316. ; CPC_GDStatus()
  317. ;    description: This call gets the data status
  318. ;    entry:        Long pointer to the scanner definition proc.
  319. ;    exit:        Carry set, and error code in Acc.
  320. ;***********************************
  321. CPC_GDStatus     PROC    EXPORT
  322.  
  323.                 ENTRY    CPC_GDS_did
  324.  
  325.                 jsl     $e100a8            ;normal GS/OS entry point
  326.                 dc.w    dstatus_call
  327.                 dc.l    @gd_Status        ;4 byte pointer to parameter block
  328.                 sta        >_toolErr
  329.                 rtl
  330.  
  331. @gd_Status
  332.                 dc.w    $0005
  333. CPC_GDS_did        dc.w    $0000
  334.                 dc.w    $8007
  335.                 dc.l    @cdb
  336.                 dc.l    $00000004
  337.                 dc.l    $00000000
  338.  
  339. @cdb            dc.w    $0000
  340.                 dc.b    $07
  341.                 dcb.b    3,$00
  342.                 dc.b    $04
  343.                 dcb.b    7,$00
  344.                 dc.l    CPC_GDStat
  345.  
  346. CPC_GDStat        dc.b    $00                ;Paper End Status for Page Scanner
  347.                 dc.b    $00                ;Reserevd
  348.                 EXPORT    CPC_Data
  349. CPC_Data        dc.b    $0000            ;Bytes Available MSB >>> LSB
  350.                 dcb.b    $20,$00
  351.  
  352.                 ENDP
  353.  
  354. ;***********************************
  355. ; CPC_XSense()
  356. ;    description:    This call gets the Transfer Rate
  357. ;                    at the current scanner settings.
  358. ;
  359. ;                    For a Page Scanner:
  360. ;                        113-137 $0071-$0089 = 300 DPI
  361. ;                         75- 92 $004B-$005C = 200 DPI
  362. ;
  363. ;                    For a Hand Scanner:
  364. ;                         85-103 $0055-$0067 = 400 DPI
  365. ;                         63- 77 $003F-$004D = 300 DPI
  366. ;                         42- 53 $002A-$0035 = 200 DPI
  367. ;
  368. ;    entry:        Long pointer to the scanner definition proc.
  369. ;    exit:        Carry set, and error code in Acc.
  370. ;***********************************
  371. CPC_XSense         PROC    EXPORT
  372.  
  373.                 ENTRY    CPC_XS_did
  374.  
  375. ;                jsl     $e100a8            ;normal GS/OS entry point
  376. ;                dc.w    dstatus_call
  377. ;                dc.l    @xd_Status        ;4 byte pointer to parameter block
  378. ;                sta        >_toolErr
  379.                 rtl
  380.  
  381. @xd_Status
  382.                 dc.w    $0005
  383. CPC_XS_did        dc.w    $0000
  384.                 dc.w    $800E
  385.                 dc.l    @cdb
  386.                 dc.l    $00000003
  387.                 dc.l    $00000000
  388.  
  389. @cdb            dc.w    $0000
  390.                 dc.b    $0E
  391.                 dcb.b    3,$00
  392.                 dc.b    $03
  393.                 dcb.b    7,$00
  394.                 dc.l    CPC_XStatus
  395.  
  396. CPC_XStatus        dc.b    $00                ;Will be a Two '2'
  397.                 EXPORT    CPC_TRate
  398. CPC_TRate        dc.w    $0030            ;Transfer Rate MSB >>> LSB
  399.  
  400.                 ENDP
  401.  
  402. ;***********************************
  403. ; CPC_Read()
  404. ;    description: This call Reads the Scaned Data
  405. ;    entry:        None.
  406. ;    exit:        Carry set, and error code in Acc.
  407. ;***********************************
  408. CPC_Read        PROC    EXPORT
  409.  
  410.                 ENTRY    CPCRead_did
  411.                 ENTRY    CPC_ReadRqst
  412.                 ENTRY    CPC_buffer1
  413.                 
  414.                 jsl     $e100a8            ;normal GS/OS entry point
  415.                 dc.w    dstatus_call
  416.                 dc.l    @read            ;4 byte pointer to parameter block
  417.                 sta        >_toolErr
  418.                 rtl
  419. @read
  420.                 dc.w    $0005
  421. CPCRead_did        dc.w    $0000
  422.                 dc.w    $8008
  423.                 dc.l    cdb
  424. CPC_ReadRqst    dc.l    $00000000
  425.                 dc.l    $00000000
  426.  
  427. cdb                dc.w    $0000
  428.                 dc.b    $08
  429.                 dcb.b    2,$00
  430.                 dc.w    $0000            ;Becomes the Request Count in the Driver
  431.                 dcb.b    7,$00
  432. CPC_buffer1        dc.l    $00000000
  433.  
  434.                 ENDP
  435.  
  436. ;***********************************
  437. ; CPC_Unload()
  438. ;    description: This call Stops the scanning Process
  439. ;    entry:        None.
  440. ;    exit:        Carry set, and error code in Acc.
  441. ;***********************************
  442. CPC_Unload        PROC    EXPORT
  443.  
  444.                 ENTRY    CPC_Kill_did
  445.                 
  446.                 jsl     $e100a8            ;normal GS/OS entry point
  447.                 dc.w    dcontrol_call
  448.                 dc.l    @unload            ;4 byte pointer to parameter block
  449.                 sta        >_toolErr
  450.                 rtl
  451. @unload
  452.                 dc.w    $0005
  453. CPC_Kill_did    dc.w    $0000
  454.                 dc.w    $801B
  455.                 dc.l    @cdb
  456.                 dc.l    $00000000
  457.                 dc.l    $00000000
  458.  
  459. @cdb            dc.w    $0000
  460.                 dc.b    $1B
  461.                 dcb.b    11,$00
  462.                 dc.l    $00000000
  463.  
  464.                 ENDP
  465.  
  466. ;***********************************
  467. ; CPC_Scan(data_pointer, requestCount, Width, Length)
  468. ;
  469. ;    description: This call Reads the scanner Data
  470. ;    entry:        A pointer to the data destination, and a long count.
  471. ;    exit:        Carry set, and error code in Acc.
  472. ;
  473. ;    NOTE:    Here we must utilize the pointer we are
  474. ;            handed...., and it must reflect the real
  475. ;            data size
  476. ;
  477. ;***********************************
  478. CPC_Scan        PROC    EXPORT
  479.  
  480.                 IMPORT    CPC_Type
  481.                 IMPORT    CPC_Page_Ctrl
  482.                 IMPORT    CPC_Hand_Ctrl
  483.                 IMPORT    CPC_TRate
  484.                 IMPORT    CPC_Scan_Len
  485.                 IMPORT    CPC_Data
  486.                 IMPORT    CPC_ReadRqst
  487.  
  488.                 lda        6,S                ;get the pointer to the window definition
  489.                 sta        >CPC_buffer1+2
  490.  
  491.                 lda        4,S
  492.                 sta        >CPC_buffer1                
  493.  
  494.                 lda        10,S            ;get the data length
  495.                 sta        >t_rqst+2
  496.                 sta        >t_remain+2
  497.  
  498.                 lda        8,S
  499.                 sta        >t_rqst
  500.                 sta        >t_remain
  501.  
  502.                 lda        12,S            ;get the Scan Line Width
  503.                 sta        >tw_width
  504.                 clc
  505.                 adc        #$0003
  506.                 lsr        a
  507.                 lsr        a
  508.                 sta        >w_width
  509.  
  510.                 lda        16,S            ;get the data length
  511.                 sta        >w_length
  512.                                         ;
  513.                                         ; Get the Scanner Type
  514.                                         ;
  515.                 jsl        CPCScan_GetMode
  516.                 bcs        @exit1
  517.                                         ;
  518.                                         ; Get the Scanner Resolution
  519.                                         ;
  520.                 jsl        CPC_XSense
  521. ;                bcs        @exit1
  522.                                         ;
  523.                                         ; Which Scanner is it?
  524.                                         ;
  525.                 lda        >CPC_Type
  526.                 bmi        @page
  527.                                         ;
  528.                                         ; It's a hand Scanner.
  529.                                         ; Turn it on
  530.                                         ;
  531.                 lda        #$0101
  532.                 sta        >CPC_Page_Ctrl
  533.                 lda        #$0001
  534.                 sta        >CPC_Type
  535.                                         
  536.                                         ;
  537.                                         ; What DPI are we at?
  538.                                         ;
  539.                 lda        >CPC_TRate
  540.                 cmp        #$0055
  541.                 bge        @dpi_400
  542.                 cmp        #$003F
  543.                 bge        @dpi_300
  544.                 blt        @dpi_200
  545.                                         ;
  546.                                         ; It's a Page Scanner.
  547.                                         ; Turn it on
  548.                                         ;
  549. @page            lda        #$0101
  550.                 sta        >CPC_Page_Ctrl
  551.                 lda        #$0081
  552.                 sta        >CPC_Type
  553.                                         ;
  554.                                         ; What DPI are we at?
  555.                                         ;
  556.                 lda        >CPC_TRate
  557.                 cmp        #$0071
  558.                 bge        @dpi_300
  559.                 blt        @dpi_200
  560.                                         ;
  561.                                         ; Set the DPI Value.
  562.                                         ;
  563. @dpi_400        lda        #400
  564.                 bra        @set_dpi
  565.  
  566. @dpi_300        lda        #300
  567.                 bra        @set_dpi
  568.  
  569. @dpi_200        lda        #200
  570.  
  571. @set_dpi        sta        >CPC_Dpi
  572.                                         ;
  573.                                         ; Set the Scanner Type and turn the
  574.                                         ; Scanner on
  575.                                         ;
  576.                 lda        #$0000
  577.                 sta        >CPC_MSdata
  578.  
  579.                 jsl        CPCScan_SetMode
  580.                 bcs        @exit1
  581.                                         ;
  582.                                         ; Set the Scan Line Width.
  583.                                         ;
  584.                 lda        >w_width
  585.                 xba
  586.                 sta        >CPC_Scan_Len
  587.                                         ;
  588.                                         ; Set the Scanner Type and turn the
  589.                                         ; Scanner on
  590.                                         ;
  591.                 jsl        CPCScan_SetMode
  592.                 bcc        @GDS_Loop
  593. @exit1            brl        @exit
  594.                                         ;
  595.                                         ; Does the Scanner have a Scan Line Yet?
  596.                                         ;
  597. @GDS_Loop        jsl        CPC_GDStatus
  598.                 bcs        @exit1
  599.                 lda        >CPC_Data
  600.                 xba
  601.                 cmp        >w_width
  602.                 blt        @GDS_Loop
  603.                                         ;
  604.                                         ; Get the Scan Line
  605.                                         ;
  606.                 lda        >w_width
  607.                 sta        >CPC_ReadRqst
  608.                 jsl        CPC_Read
  609.                 bcs        @exit1
  610.  
  611.                 jsl        covert2gray2
  612.                 bcs        @skip_buff
  613.                                         ;
  614.                                         ; Update the Buffer Pointer
  615.                                         ;
  616.                 lda        >CPC_buffer1
  617.                 adc        >tw_width
  618.                 sta        >CPC_buffer1
  619.                 lda        >CPC_buffer1+2
  620.                 adc        #$0000
  621.                 sta        >CPC_buffer1+2
  622.                                         ;
  623.                                         ; Update the Resulting Count
  624.                                         ;
  625. @skip_buff        lda        >t_rslt
  626.                 adc        >tw_width
  627.                 sta        >t_rslt
  628.                 lda        >t_rslt+2
  629.                 adc        #$0000
  630.                 sta        >t_rslt+2
  631.                                         ;
  632.                                         ; Is there any more data requested>
  633.                                         ;
  634.                 sec
  635.                 lda        >t_remain
  636.                 sbc        >tw_width
  637.                 sta        >t_remain
  638.  
  639.                 lda        >t_remain+2
  640.                 sbc        #$0000
  641.                 sta        >t_remain+2
  642.  
  643.                 ora        >t_remain
  644.                 beq        @done            ;No! Done with the Scan
  645.  
  646.                 sec
  647.                 lda        >t_remain
  648.                 sbc        >tw_width        ;Room for at least 1 more?
  649.                 lda        >t_remain+2
  650.                 sbc        #$0000
  651.                 blt        @done            ;No! Done with the Scan
  652.                 brl        @GDS_Loop        ;Yes.  Go Get it
  653.                                         ;
  654.                                         ; No more data left.  Stop the Scan
  655.                                         ;
  656. @done            jsl        CPC_Unload
  657.                 bcs        @exit
  658.  
  659.                 sta        >_toolErr
  660.                 lda        >t_rslt+2
  661.                 tax
  662.                 lda        >t_rslt
  663.  
  664.                 rtl
  665.  
  666. @exit            sta        >_toolErr
  667.                 rtl
  668.  
  669. w_width            dc.l    $0000
  670. tw_width        dc.l    $0000
  671. w_length        dc.l    $0000
  672. CPC_Dpi            dc.w    $0000
  673.  
  674. t_rqst            dc.l    $00000000
  675. t_remain        dc.l    $00000000
  676. t_rslt            dc.l    $00000000
  677.                                         ;
  678.                                         ; Scanned Data is 1 bit/pixel.  We need to
  679.                                         ; convert it to 4 bits/pixel.  We will do this
  680.                                         ; with a lookup table in 8 bit mode.
  681.                                         ;
  682. covert2gray
  683.                 phb
  684.                 phk
  685.                 plb
  686.  
  687.                 pei        <$40
  688.                 pei        <$42
  689.  
  690.                 phy
  691.  
  692.                 lda        >CPC_buffer1
  693.                 sta        <$40
  694.                 lda        >CPC_buffer1+2
  695.                 sta        <$42
  696.  
  697.                 ldx        w_width
  698.                 dex
  699.                 and        #$00ff
  700.                 stx        @src_ndx
  701.                 lda        w_width
  702.                 asl        a
  703.                 asl        a
  704.                 dec        a
  705.                 sta        @dest_ndx
  706.                 lda        #$0000
  707.  
  708.                 SHORTM
  709.  
  710. @cvrt_loop        ldy        @src_ndx
  711.                 lda        [$40],y
  712.                 tax
  713.                 lda        HTone_2Gray3,x
  714.                 pha
  715.                 lda        HTone_2Gray2,x
  716.                 pha
  717.                 lda        HTone_2Gray1,x
  718.                 pha
  719.                 lda        HTone_2Gray0,x
  720.  
  721.                 ldy        @dest_ndx
  722.                 sta        [$40],y
  723.                 pla
  724.                 dey
  725.                 sta        [$40],y
  726.                 pla
  727.                 dey
  728.                 sta        [$40],y
  729.                 pla
  730.                 dey
  731.                 sta        [$40],y
  732.                 dey
  733.                 sty        @dest_ndx
  734.                 dec        @src_ndx
  735.                 bpl        @cvrt_loop
  736.  
  737.                 LONGM
  738.  
  739.                 ply
  740.  
  741.                 pla
  742.                 sta        <$42
  743.                 pla
  744.                 sta        <$40
  745.  
  746.                 plb
  747. @exit            clc
  748.                 rtl
  749.  
  750. @src_ndx        dc.w    $0000
  751. @dest_ndx        dc.w    $0000
  752.  
  753. HTone_2Gray0
  754.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  755.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  756.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  757.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  758.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  759.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  760.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  761.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  762.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  763.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  764.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  765.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  766.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  767.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  768.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  769.                 dc.b    $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
  770. HTone_2Gray1
  771.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  772.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  773.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  774.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  775.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  776.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  777.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  778.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  779.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  780.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  781.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  782.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  783.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  784.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  785.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  786.                 dc.b    $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
  787. HTone_2Gray2
  788.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  789.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  790.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  791.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  792.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  793.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  794.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  795.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  796.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  797.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  798.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  799.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  800.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  801.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  802.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  803.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  804. HTone_2Gray3
  805.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  806.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  807.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  808.                 dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  809.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  810.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  811.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  812.                 dc.b    $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
  813.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  814.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  815.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  816.                 dc.b    $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
  817.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  818.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  819.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  820.                 dc.b    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  821.                                         ;
  822.                                         ; Scanned Data is 1 bit/pixel.  We need to
  823.                                         ; convert it to 4 bits/pixel.  We will do this
  824.                                         ; with a lookup table in 8 bit mode.
  825.                                         ;
  826. covert2gray2
  827.                 sec
  828.                 inc        @pass
  829.                 beq        @exit
  830.  
  831.                 phb
  832.                 phk
  833.                 plb
  834.  
  835.                 pei        <$40
  836.                 pei        <$42
  837.  
  838.                 phy
  839.  
  840.                 lda        >CPC_buffer1
  841.                 sta        <$40
  842.                 lda        >CPC_buffer1+2
  843.                 sta        <$42
  844.  
  845.                 ldx        w_width
  846.                 dex
  847.                 and        #$00ff
  848.                 stx        @src_ndx
  849.                 lda        w_width
  850.                 asl        a
  851.                 dec        a
  852.                 sta        @dest_ndx
  853.                 lda        #$0000
  854.  
  855.                 SHORTM
  856.  
  857. @cvrt_loop        ldy        @src_ndx
  858.                 lda        [$40],y
  859.                 tax
  860.                 lda        HTone_2Gray5,x
  861.                 pha
  862.                 lda        HTone_2Gray4,x
  863.  
  864.                 ldy        @dest_ndx
  865.                 sta        [$40],y
  866.                 pla
  867.                 dey
  868.                 sta        [$40],y
  869.                 dey
  870.                 sty        @dest_ndx
  871.                 dec        @src_ndx
  872.                 bpl        @cvrt_loop
  873.  
  874.                 LONGM
  875.  
  876.                 ply
  877.  
  878.                 pla
  879.                 sta        <$42
  880.                 pla
  881.                 sta        <$40
  882.  
  883.                 plb
  884.  
  885.                 lda        #$ffff
  886.                 sta        @pass
  887.                 clc
  888.  
  889. @exit            rtl
  890.  
  891. @src_ndx        dc.w    $0000
  892. @dest_ndx        dc.w    $0000
  893. @pass            dc.w    $ffff
  894.  
  895. HTone_2Gray4
  896.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  897.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  898.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  899.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  900.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  901.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  902.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  903.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  904.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  905.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  906.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  907.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  908.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  909.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  910.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  911.                 dc.b    $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
  912. HTone_2Gray5
  913.                 dcb.b    16,$00
  914.                 dcb.b    16,$04
  915.                 dcb.b    16,$03
  916.                 dcb.b    16,$0C
  917.                 dcb.b    16,$30
  918.                 dcb.b    16,$78
  919.                 dcb.b    16,$77
  920.                 dcb.b    16,$CF
  921.                 dcb.b    16,$40
  922.                 dcb.b    16,$88
  923.                 dcb.b    16,$87
  924.                 dcb.b    16,$CF
  925.                 dcb.b    16,$C4
  926.                 dcb.b    16,$D5
  927.                 dcb.b    16,$F7
  928.                 dcb.b    16,$FF
  929.  
  930.                 ENDP
  931.  
  932. ;***********************************
  933. ; Scan_Inquiry()
  934. ;    description: This call determines the Scanner Brand
  935. ;    entry:        None.
  936. ;    exit:        Carry set, and error code in Acc.
  937. ;***********************************
  938. Scan_Inquiry    PROC    EXPORT
  939.  
  940.                 ENTRY    Inq_did
  941.                 ENTRY    Inq_data
  942.                 
  943.                 jsl     $e100a8            ;normal GS/OS entry point
  944.                 dc.w    dstatus_call
  945.                 dc.l    @Inquiry        ;4 byte pointer to parameter block
  946.                 sta        >_toolErr
  947.                 rtl
  948. @Inquiry
  949.                 dc.w    $0005
  950. Inq_did            dc.w    $0000
  951.                 dc.w    $8012
  952.                 dc.l    @cdb
  953.                 dc.l    $00000020
  954.                 dc.l    $00000000
  955.  
  956. @cdb            dc.w    $0000
  957.                 dc.b    $12
  958.                 dcb.b    3,$00
  959.                 dc.b    $20
  960.                 dcb.b    7,$00
  961.                 dc.l    Inq_data
  962.  
  963. Inq_data        dcb.b    $20,$00
  964.  
  965.                 ENDP
  966.  
  967. ;***********************************
  968. ;
  969. ; Scanner_Open();
  970. ;    description: Find and open the scanner device
  971. ;     entry:        None.
  972. ;    exit:        carry set, and error code in Acc if an error occurs.
  973. ;
  974. ;***********************************
  975. Scanner_Open    PROC    EXPORT
  976.  
  977.                 IMPORT    c_dref,Scanner_Type
  978.  
  979.                 lda        >scanDevnum        ;copy scanner device ID to various parm blocks
  980.                 sta        >scanner_did
  981.                 sta        >ms_did
  982.                 sta        >send_did
  983.                 sta        >dfw_did
  984.                 sta        >scan_did
  985.                 sta        >wait_did
  986.                 sta        >CPCms_did
  987.                 sta        >CPCmsen_did
  988.                 sta        >CPC_GDS_did
  989.                 sta        >CPC_XS_did
  990.                 sta        >CPCRead_did
  991.                 sta        >CPC_Kill_did
  992.                 sta        >Inq_did
  993. ;
  994. ; Do the Scanner Inquiry Call.  This way we can ID the Type of Scanner that
  995. ; we are dealing with.
  996. ;
  997.                 jsl     Scan_Inquiry
  998.                 bcs        @exit
  999. ;
  1000. ; What Scanner do We have?
  1001. ;
  1002.                 ldx        #$0010
  1003. @Apple_Loop        lda        >Inq_data,x
  1004.                 cmp        >Apple_String,x
  1005.                 bne        @chk_CPC
  1006.                 dex
  1007.                 bpl        @Apple_Loop
  1008.                 jmp        Apple_Open
  1009.  
  1010. @chk_CPC        ldx        #$0010
  1011. @CPC_Loop        lda        >Inq_data,x
  1012.                 cmp        >CPC_String,x
  1013.                 bne        @chk_NuScan
  1014.                 dex
  1015.                 bpl        @CPC_Loop
  1016.                 jmp        CPC_Open
  1017.  
  1018. @chk_NuScan        ldx        #$0010
  1019. @NuScan_Loop    lda        >Inq_data,x
  1020.                 cmp        >NuScan_String,x
  1021.                 bne        @None
  1022.                 dex
  1023.                 bpl        @NuScan_Loop
  1024.                 jmp        NuScan_Open
  1025.  
  1026. @None            lda        #$002f
  1027.                 sec
  1028. @exit            sta        >_toolErr
  1029.                 rtl
  1030.  
  1031.                 STRING    ASIS
  1032. Apple_String    dc.b    $06,$00,$02,$02,$2C,$00,$00,$00
  1033.                 dc.b    'APPLE   SCANNER A9M0337 '
  1034. CPC_String        dc.b    $06,$00,$02,$02,$28,$00,$00,$00
  1035.                 dc.b    'CPC INC Smart Scan(FW)  '
  1036. NuScan_String    dc.b    $06,$00,$02,$02,$28,$00,$00,$00
  1037.                 dc.b    'CPC INC Smart Scan(FW)  '
  1038. ;
  1039. ; Start point for finalizing the Apple Scanner Open Call
  1040. ; make a DInfo call to get the device name
  1041. ;
  1042. Apple_Open        jsl     $e100a8            ;normal GS/OS entry point
  1043.                 dc.w    dinfo_call
  1044.                 dc.l    get_scan_name    ;4 byte pointer to parameter block
  1045.                 bcs        @exit
  1046.  
  1047. ;
  1048. ; Now that we have the name, we can open the device (using the Character FST)
  1049. ;
  1050.                 jsl     $e100a8            ;normal GS/OS entry point
  1051.                 dc.w    open_call
  1052.                 dc.l    dvc_open        ;4 byte pointer to parameter block
  1053.                 bcs        @exit            ;say goodnight if errors
  1054.  
  1055.                 lda        >open_dref        ;copy reference number to other parm blocks
  1056.                 sta        >r_dref
  1057.                 sta        >c_dref
  1058.  
  1059. ;
  1060. ; Now that it's open, we can set wait mode to WAIT
  1061. ;
  1062.                 jsl     $e100a8            ;normal GS/OS entry point
  1063.                 dc.w    dcontrol_call
  1064.                 dc.l    wait            ;4 byte pointer to parameter block
  1065.                 bcs        @exit
  1066.                 lda        #$0000
  1067.                 sta        >Scanner_Type
  1068.                 lda        #$0000
  1069.  
  1070. @exit            sta        >_toolErr
  1071.                 rtl
  1072.  
  1073. get_scan_name
  1074.                 dc.w    $0002            ;pCount
  1075. scanner_did        dc.w    $0000
  1076.                 dc.l    scan_dname_buf
  1077.  
  1078.                 export    open_dref
  1079. dvc_open
  1080.                 dc.w    $0002
  1081. open_dref        dc.w    $0000
  1082.                 dc.l    scan_dname
  1083.  
  1084.                 STRING    asis
  1085.  
  1086. scan_dname_buf    dc.w    36                ;ResultBuf32 length is 36 bytes
  1087. scan_dname        ds.w    1                ;returned length word
  1088.                 ds.b    32                ;space for returned device name
  1089.  
  1090.                 STRING    PASCAL
  1091.  
  1092. wait
  1093.                 dc.w    $0005
  1094. wait_did        dc.w    $0000
  1095.                 dc.w    $0004
  1096.                 dc.l    @cdb
  1097.                 dc.l    $00000002
  1098.                 dc.l    $00000000
  1099.  
  1100. @cdb
  1101.                 dc.w    $0000            ;set wait mode
  1102. ;
  1103. ; Start point for finalizing the CPC Scanner Open Call
  1104. ;
  1105. CPC_Open        lda        #$0001
  1106.                 sta        >Scanner_Type
  1107.  
  1108.                 lda        #$0000
  1109.                 clc
  1110.                 sta        >_toolErr
  1111.                 rtl
  1112. ;
  1113. ; Start point for finalizing the NuScan Scanner Open Call
  1114. ;
  1115. NuScan_Open        lda        #$0002
  1116.                 sta        >Scanner_Type
  1117.  
  1118.                 lda        #$0000
  1119.                 clc
  1120.                 sta        >_toolErr
  1121.                 rtl
  1122.  
  1123.                 ENDP
  1124.  
  1125. ;***********************************
  1126. ; Scanner_Close()
  1127. ;    description: This call closes the scanner device
  1128. ;    entry:        None.
  1129. ;    exit:        Carry set, and error code in Acc.
  1130. ;***********************************
  1131. Scanner_Close    PROC    EXPORT
  1132.  
  1133.                 ENTRY    c_dref
  1134.  
  1135.                 clc
  1136.                 lda        >c_dref
  1137.                 beq        @close
  1138.  
  1139.                 jsl     $e100a8            ;normal GS/OS entry point
  1140.                 dc.w    close_call
  1141.                 dc.l    close            ;4 byte pointer to parameter block
  1142. @close            sta        >_toolErr
  1143.                 rtl
  1144. close
  1145.                 dc.w    $0001
  1146.                 export    c_dref
  1147. c_dref            dc.w    $0000
  1148.  
  1149.                 ENDP
  1150.  
  1151.                 END
  1152.             
  1153.     
  1154.  
  1155.  
  1156.